// ~ Package Declaration
// ==================================================

package com.wms.data.pojo;

import java.io.Serializable;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

// ~ Comments
// ==================================================

/**
 * 
 * All pojo's parent.
 * 
 * <pre>
 * 歷史紀錄：
 * 2008/11/5 Timothy
 * 	新建檔案
 * </pre>
 * 
 * @author <pre>
 * SD
 * 	Timothy
 * PG
 * 
 * UT
 * 
 * MA
 * </pre>
 * @version $Rev$
 * 
 *          <p/>
 *          $Id$
 * 
 */
public abstract class AbstractPojo<PK extends Serializable> implements Pojo<PK> {

	// ~ Static Fields
	// ==================================================

	private static final long serialVersionUID = -2018237952997225442L;

	// ~ Fields
	// ==================================================

	private PK id;

	// ~ Constructors
	// ==================================================

	public AbstractPojo() {

	}

	public AbstractPojo(PK id) {

		super();
		this.id = id;
	}

	// ~ Methods
	// ==================================================

	/*
	 * 2008/11/5 Timothy
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {

		return new HashCodeBuilder().append(this.id).toHashCode();
	}

	/*
	 * 2008/11/5 Timothy
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean equals(Object obj) {

		if (this == obj) {
			return true;
		}

		if (!(obj instanceof AbstractPojo)) {
			return false;
		}

		return new EqualsBuilder().append(this.id, ((AbstractPojo<PK>) obj).id).isEquals();
	}

	/*
	 * 2009/2/18 Timothy TODO : 待 Override AbstractPojo's toString
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {

		return super.toString();
	}

	/**
	 * @return 傳回 id。
	 */
	public PK getId() {

		return this.id;
	}

	/**
	 * @param id
	 *          要設定的 id。
	 */
	public void setId(PK id) {

		this.id = id;
	}

}
